#include "TestAlmacenamientoFijoMasivo.h"

#include "../src/recursoDeAlmacenamiento/FabricaRecursosAlmacenamiento.h"
#include "../src/recursoDeAlmacenamiento/RecursoDeAlmacenamiento.h"
#include "../src/estrategiaAlmacenamiento/EstrategiaAlmacenamientoBloques.h"
#include "../src/recursoDeAlmacenamiento/RecursoDeAlmacenamientoDirecto.h"
#include "../src/FuncionesUtiles.h"
#include "../src/estrategiaRecurso/Archivo.h"
#include "../src/estrategiaAlmacenamiento/Iterador.h"
#include "../src/Bytes.h"


TestAlmacenamientoFijoMasivo::TestAlmacenamientoFijoMasivo() {


}

TestAlmacenamientoFijoMasivo::~TestAlmacenamientoFijoMasivo() {


}

void TestAlmacenamientoFijoMasivo::run() {
	this->test();
}

void TestAlmacenamientoFijoMasivo::test() {

	system("rm -f -r ArchivoMasivo*");

	RecursoDeAlmacenamientoDirecto* recurso = FabricaRecursosAlmacenamiento::getFabrica()->crearRecursoAccesoDirecto("ArchivoMasivo",12,DIFERIDA);

	cantBytes cantRegistros = 10000;

	cout << "Se cargaran 10 mil registros, espere unos segundos..." << endl;
	for (cantBytes i = 0 ; i < cantRegistros; i++) {
		stringstream ss;
		ss << i;

		Bytes dato("dato");
		dato.agregarAlFinal(ss.str());

		if (dato.getTamanio() < 12) {
			dato.agregarAlFinal(crearBytesNulos(12 - dato.getTamanio()));
		}

		recurso->guardar(dato);
	}

	Iterador *it = recurso->getIterador();
	cantBytes i = 0;

	while (it->tieneSiguiente()) {
		stringstream ss;
		ss << i;
		i++;
		Bytes dato("dato");
		dato.agregarAlFinal(ss.str());

		if (dato.getTamanio() < 12) {
			dato.agregarAlFinal(crearBytesNulos(12 - dato.getTamanio()));
		}

		Bytes datoCargado = it->getSiguiente();

		assert(datoCargado.toString() == dato.toString(),"Test Masivo Registros Fijos " + dato.toString());

		if ((i % 200) == 0) {
			recurso->imprimirBuffer();
		}
	}

	delete recurso;
	delete it;
}
